]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
dialog: Reset initial focus on destroy
authorFlorian Müllner <fmuellner@gnome.org>
Thu, 5 Oct 2017 08:06:10 +0000 (10:06 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Thu, 26 Oct 2017 16:14:52 +0000 (18:14 +0200)
Since 0b02f757f862 we track the button that should have key focus
when the dialog is opened. However when the dialog is reused, the
button may get destroyed - clear the initial focus in that case to
allow setButton() to set a new one.

https://bugzilla.gnome.org/show_bug.cgi?id=788542

js/ui/dialog.js

index 781fe0a97277ceca67de0d4f0e485e38028c7607..090ef2fee55e3836c97d59c6183b5a61964700be 100644 (file)
@@ -16,6 +16,7 @@ var Dialog = new Lang.Class({
         this.connect('destroy', Lang.bind(this, this._onDestroy));
 
         this._initialKeyFocus = null;
+        this._initialKeyFocusDestroyId = 0;
         this._pressedKey = null;
         this._buttonKeys = {};
         this._createDialog();
@@ -87,6 +88,18 @@ var Dialog = new Lang.Class({
         return Clutter.EVENT_PROPAGATE;
     },
 
+    _setInitialKeyFocus: function(actor) {
+        if (this._initialKeyFocus)
+            this._initialKeyFocus.disconnect(this._initialKeyFocusDestroyId);
+
+        this._initialKeyFocus = actor;
+
+        this._initialKeyFocusDestroyId = actor.connect('destroy', () => {
+            this._initialKeyFocus = null;
+            this._initialKeyFocusDestroyId = 0;
+        });
+    },
+
     get initialKeyFocus() {
         return this._initialKeyFocus || this;
     },
@@ -122,7 +135,7 @@ var Dialog = new Lang.Class({
             button.add_style_pseudo_class('default');
 
         if (this._initialKeyFocus == null || isDefault)
-            this._initialKeyFocus = button;
+            this._setInitialKeyFocus(button);
 
         for (let i in keys)
             this._buttonKeys[keys[i]] = buttonInfo;